using System.Collections.Generic;
using Unity.Mathematics;
namespace Gltf
{
    public class Node : NamedObject
    {
        public static string TypeName = "Node";

        /**
         * @brief The index of the camera referenced by this node.
         */
        public int camera = -1;

        /**
         * @brief The indices of this node's children.
         */
        public List<int> children=new List<int>();

        /**
         * @brief The index of the skin referenced by this node.
         *
         * When a skin is referenced by a node within a scene, all joints used by the
         * skin **MUST** belong to the same scene. When defined, `mesh` **MUST** also
         * be defined.
         */
        public int skin = -1;

        /**
         * @brief A floating-point 4x4 transformation matrix stored in column-major
         * order.
         */
        public double4x4 matrix = new double4x4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);

        /**
         * @brief The index of the mesh in this node.
         */
        public int mesh = -1;

        /**
         * @brief The node's unit quaternion rotation in the order (x, y, z, w), where
         * w is the scalar.
         */
        public double4 rotation = new double4(0, 0, 0, 1);

        /**
         * @brief The node's non-uniform scale, given as the scaling factors along the
         * x, y, and z axes.
         */
        public double3 scale = new double3(1, 1, 1);

        /**
         * @brief The node's translation along the x, y, and z axes.
         */
        public double3 translation = new double3(0, 0, 0);

        /**
         * @brief The weights of the instantiated morph target. The number of array
         * elements **MUST** match the number of morph targets of the referenced mesh.
         * When defined, `mesh` **MUST** also be defined.
         */
       public List<double> weights;
    }
}